# -*- coding: utf-8 -*-
'''
序列化操作
'''

'''
把变量从内存中变成可存储或传输的过程称之为序列化，在Python中叫pickling
反过来，把变量内容从序列化的对象重新读到内存里称之为反序列化，即unpickling
方法pickle.dumps()把任意对象序列化成一个bytes，然后，就可以把这个bytes写入文件。
方法pickle.dump()直接把对象序列化后写入一个file-like Object。

'''
import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
f = open(r'E:\usr\test1.txt', 'wb')
pickle.dump(d,f)#写入的test1.txt文件，一堆乱七八糟的内容，这些都是Python保存的对象内部信息。
f.close()
'''
当我们要把对象从磁盘读到内存时，可以先把内容读到一个bytes，然后用pickle.loads()方法反序列化出对象，也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象
'''
f = open(r'E:\usr\test1.txt', 'rb')
d = pickle.load(f)
f.close()
print d #这个变量和原来的变量是完全不相干的对象，它们只是内容相同而已
'''
序列化为JSON，因为JSON表示出来就是一个字符串，可以被所有语言读取，也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式，并且比XML更快，而且可以直接在Web页面中读取，非常方便。
JSON表示的对象就是标准的JavaScript语言的对象，JSON和Python内置的数据类型对应如下：
JSON类型	Python类型
{}	         dict
[]	         list
"string"	  str
1234.56	  int或float
true/false	  True/False
null	     None
json.dumps()方法返回一个str，内容就是标准的JSON。类似的，json.dump()方法可以直接把JSON写入一个file-like Object
'''
import json
d = dict(name='Bob', age=20, score=88)
print json.dumps(d)
'''
json.loads()把JSON的字符串反序列化。
json.load()方法从file-like Object中读取字符串并反序列化。
'''
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
d = json.loads(json_str)
print d
for key,value in d.iteritems():
    print key, ':', value
'''
json对class进行序列化
'''
